package com.gitee.qdbp.base.controlling;

import java.util.Date;
import java.util.List;
import com.gitee.qdbp.base.system.model.IAccount;

/**
 * 操作控制的线程变量
 *
 * @author zhaohuihua
 * @version 160608
 */
public interface IControllingVars {

    /** 当前登录账号 **/
    void setAccount(IAccount operator);

    /** 当前登录账号 **/
    IAccount getAccount();

    /** 判断某个字段是否启用数据隔离 **/
    boolean useDataIsolation(String field);

    /** 禁用某个字段的数据隔离 **/
    void disableDataIsolation(String field, String... fields);

    /** 启用某个字段的数据隔离 **/
    void enableDataIsolation(String field, String... fields);

    /** 增加操作日志 **/
    void addTraces(OperateTracesBean item);

    /** 获取操作日志 **/
    List<OperateTracesBean> getTraces(boolean clear);

    /** 增加数据库调用次数 **/
    void addDbInvokeTimes();

    /** 获取数据库调用次数 **/
    Integer getDbInvokeTimes(boolean clear);

    /** 获取本次操作的开始时间 **/
    Date getStartTime(boolean clear);

    /** 开始一次新的操作, 清空操作日志, 记录开始时间 **/
    void start();

    /** 清空线程变量数据 **/
    void clear();

    /** 根据KEY保存数据 **/
    void put(String group, String key, Object value);

    /** 根据KEY获取数据 **/
    Object get(String group, String key);

    /** 根据KEY获取数据 **/
    <T> T get(String group, String key, Class<T> clazz);

    /** 根据KEY获取数据 **/
    <T> List<T> getList(String group, String key, Class<T> clazz);

}
